/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managers;

import conexionBD.ConexionServidor;
import java.io.Serializable;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.jsp.jstl.sql.Result;
import javax.servlet.jsp.jstl.sql.ResultSupport;


/**
 *
 * @author jose
 */
@ManagedBean
@SessionScoped
public class managerMantenimiento implements Serializable {

    private int catalogoSeleccionado;
    private String nombreTabla;
    private Integer idtemporal;
    private String temporal;
    private int idactualizar;
    private String datoActualizar;
    private String nuevoDato;
    FacesContext context;

    /** Creates a new instance of managerMantenimiento */
    public managerMantenimiento() {
    }

    public int getCatalogoSeleccionado() {
        return catalogoSeleccionado;
    }

    public void setCatalogoSeleccionado(int catalogoSeleccionado) {
        this.catalogoSeleccionado = catalogoSeleccionado;
    }

    public Integer getIdtemporal() {
        return idtemporal;
    }

    public void setIdtemporal(Integer idtemporal) {
        this.idtemporal = idtemporal;
    }

    public String getTemporal() {
        return temporal;
    }

    public void setTemporal(String temporal) {
        this.temporal = temporal;
    }

    public String getDatoActualizar() {
        return datoActualizar;
    }

    public void setDatoActualizar(String datoActualizar) {
        this.datoActualizar = datoActualizar;
    }

    public int getIdactualizar() {
        return idactualizar;
    }

    public void setIdactualizar(int idactualizar) {
        this.idactualizar = idactualizar;
    }

    public String getNuevoDato() {
        return nuevoDato;
    }

    public void setNuevoDato(String nuevoDato) {
        this.nuevoDato = nuevoDato;
    }

    public String getNombreTabla() {
        return nombreTabla;
    }

    public void setNombreTabla(String nombreTabla) {
        this.nombreTabla = nombreTabla;
    }

    public ArrayList getListaCatalago() {
        ConexionServidor myConexion = new ConexionServidor();
        ArrayList ListaCatalago = new ArrayList<SelectItem>();
        ListaCatalago.add(new SelectItem("0", "-seleccione uno-"));
        try {
            Connection con = myConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select * from catalogo");
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                ListaCatalago.add(new SelectItem(rs.getInt("idcatalogo"), rs.getString("catalogo")));
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return ListaCatalago;
    }

    public String llenarTemporal() {
        String destino= "irDatos";
        obtenerNombreTabla();
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call rellenartemporal(?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            cs.setString(1, nombreTabla);
            //ejecucion del proceso almacenado
            cs.execute();
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return destino;
    }

    public void obtenerNombreTabla() {
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            PreparedStatement ps = con.prepareStatement("select nombre_tabla from catalogo where idcatalogo = ?");
            ps.setInt(1, catalogoSeleccionado);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                nombreTabla = rs.getString("nombre_tabla");
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

    }

    public Result getListaTemporal() throws Exception {
        ConexionServidor miConexion = new ConexionServidor();
        Connection conn = miConexion.getConnection();
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("select * from temporal");
            return ResultSupport.toResult(rs);

        } finally {
            conn.close();
        }
    }

    public String actualizaCatalogo() {
        String destino = null;
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call agregarcatalogo(?,?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            cs.setString(1, nombreTabla);
            cs.setString(2, datoActualizar);
            cs.setInt(3, idactualizar);
            //ejcs.setString(1, nombreTabla);ecucion del proceso almacenado
            cs.execute();
            limpiar();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La informacion fue actualizada con exito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return destino;
    }

    public String nuevo() {
        String destino = null;
        ConexionServidor myConexion = new ConexionServidor();
        try {
            Connection con = myConexion.getConnection();
            //Sentencia sql que hace el llamado a el procedimiento
            String sql = "{call catalogosimple(?,?)}";
            CallableStatement cs = con.prepareCall(sql);
            //Setting the parameters to be catched by the stored procedure
            cs.setString(1, nombreTabla);
            cs.setString(2, nuevoDato);
            //ejecucion del proceso almacenado
            cs.execute();
            context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "ACTUALIZACI&Oacute;N", "La información fue agregada con exito"));
            //cierre de CallableStatement y Connection
            cs.close();
            con.close();
            limpiar();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return destino;
    }

    public void limpiar() {
        idactualizar = 0;
        datoActualizar = null;
        nuevoDato = null;
    }
}
